package com.kfm.base.oop4;

public class Demo {

    public static void main(String[] args) {
        /*
            多态，多种形态
            同一个方法会产生不同的效果
            做什么和怎么做 分开

            方法重写是多态的基础

            Student extends Person

            Person p = new Student();

            重载是编译时多态，重写是运行时多态
         */

        /*
            父类类型的变量引用了一个子类对象, 向上转型
            此时，只能调用父类中声明的方法，子类扩展的方法不能调用
            调用实例方法时，要看是哪个对象调用的就执行哪个方法
            调用static方法时，调用的是父类的方法

            调用实例方法看等号右边，static方法看等号左边
         */
        Graphics triangle = new Triangle();

        triangle.draw();
        triangle.staticMethod();

        Graphics circle = new Circle();
//        circle.draw();

        draw(circle);

    }

    public static void draw(Graphics graphics){
        graphics.draw();
    }
}
